archive: Prevent symlink-directory collision chmod attack (#442)
authorAlex Crichton <alex@alexcrichton.com>
Thu, 19 Mar 2026 21:58:05 +0000 (16:58 -0500)
committerFabian Grünbichler <debian@fabian.gruenbichler.email>
Thu, 26 Mar 2026 10:27:54 +0000 (11:27 +0100)
commit9a094a36cef90a39e1193926b65e3191990a2081
treeef7228a7c57a509617824aca6e681fffdcd4e1bf
parent415587b452b303cc598435d237edf54eed48e383
archive: Prevent symlink-directory collision chmod attack (#442)

When unpacking a tarball containing a symlink followed by a directory
entry with the same path, unpack_dir previously used fs::metadata()
which follows symlinks. This allowed an attacker to modify permissions
on arbitrary directories outside the extraction path.

The fix uses fs::symlink_metadata() to detect symlinks and refuse to
treat them as valid existing directories.

Document more exhaustively+consistently security caveats.

Reported-by: Sergei Zimmerman <https://github.com/xokdvium>
Assisted-by: OpenCode (Claude claude-opus-4-5)
Signed-off-by: Colin Walters <walters@verbum.org>
Co-authored-by: Colin Walters <walters@verbum.org>
FG: drop test-related changes
Signed-off-by: Fabian Grünbichler <debian@fabian.gruenbichler.email>
Fixes: CVE-2026-33056
Gbp-Pq: Topic vendor
Gbp-Pq: Name tar-CVE-2026-33056.patch
vendor/tar-0.4.44/src/archive.rs
vendor/tar-0.4.44/src/entry.rs